"""
需求： 按照以下要求完成代码的编写
第一步： 录入学生信息
    1)提示用户在控制台输入3个学生的信息， 学生信息包含姓名、 年龄
    2)要求： 封装录入单个学生信息的函数， 并返回学生的信息
第二步： 展示学生列表信息
    1)封装打印学生信息的函数， 格式要求如下图：
    -----学生列表信息-----
    1 张三 19
    2 李四 18
    3 王五 22
    ----------------------
第三步： 统计学生总数
    1)封装获取学生总数的函数， 并对该函数进行调用和数据打印
第四步： 查询学生信息
    1)封装根据学生姓名查询学生信息的函数
    2)提示用户“ 请输入要查询的学生姓名： ”
    3)如果存在， 直接在控制台打印学生信息， 格式为： “ 姓名： 张三， 年龄： 25”
    4)如果不存在， 直接在控制台打印“ 对不起， 名字叫【 张三】 的学生不存在”
"""

# 保存学生使用{}， 多个学生使用列表[]
# [{}, {}]
# 定义一个全局变量，类型为list
user_list = [{'name': 'mike', 'age': 18}, {'name': 'lily', 'age': 19}, {'name': 'tom', 'age': 20}]


# 封装录入单个学生信息的函数， 并返回学生的信息
def add_stu(name, age):
    # 1. 把学生信息组装成字典
    temp_dict = {'name': name, 'age': age}
    # 2. 列表追加字典
    # user_list是全局变量，但是没有通过赋值修改，是通过方法修改，所以无需global声明
    user_list.append(temp_dict)
    # 3. 返回学生的字典信息
    return temp_dict


def show_stu_info():
    """
    1)封装打印学生信息的函数， 格式要求如下图：
    -----学生列表信息-----
    1 张三 19
    2 李四 18
    3 王五 22
    ----------------------
    """
    print('-----学生列表信息-----')
    i = 1 # 定义一个变量 ，控制序号
    for val in user_list:
        # print(val)
        print(f'{i}    {val["name"]}    {val["age"]}')
        i += 1 # 不是为了控制循环，为了控制序号
    print('----------------------')


# 第三步： 统计学生总数
#     1)封装获取学生总数的函数， 并对该函数进行调用和数据打印
def get_stu_num():
    # return len(user_list)

    # 定义一个变量，为了记录循环的次数
    i = 0
    # 一般，如果遍历的临时变量不用，习惯起名为下划线
    for _ in user_list:
        # print('=========')
        i += 1

    # print('i = ', i)
    return i

"""
第四步： 查询学生信息
    1)封装根据学生姓名查询学生信息的函数
    2)提示用户“ 请输入要查询的学生姓名： ”
    3)如果存在， 直接在控制台打印学生信息， 格式为： “ 姓名： 张三， 年龄： 25”
    4)如果不存在， 直接在控制台打印“ 对不起， 名字叫【 张三】 的学生不存在”
"""
def find_stu_by_name():
    temp_name = input('请输入要查询的学生姓名：')
    # print(temp_name)
    is_exist = False   # 默认为False
    # 循环遍历列表的每一个元素，每一个元素为字典类型
    for val in user_list:
        # print(val)
        if val['name'] == temp_name:
            print(val)
            print(f'姓名： {val["name"]}， 年龄： {val["age"]}')
            is_exist = True # 找到设置为True
            break   # 找到跳出循环
        # else:
        #     # print(f'对不起， 名字叫【{temp_name}】 的学生不存在')
        #     print(f'对不起， 名字叫【{val["name"]}】 的学生不存在')
    # 循环的外面
    if is_exist == False:
        print(f'对不起， 名字叫【{temp_name}】 的学生不存在')



if __name__ == '__main__':
    # 这里程序入口
    # 第一步： 录入学生信息
    #     1)提示用户在控制台输入3个学生的信息， 学生信息包含姓名、 年龄
    # for i in range(3):
    #     print(f'请输入第{i + 1}学生的信息')
    #     name = input('请输入姓名：')
    #     age = int(input('请输入年龄：'))
    #     print(name, age)
    #
    #     ret = add_stu(name, age) # 函数调用，录入信息
    #     print(ret, '录入成功')

    # 循环 的外面，打印列表
    print(user_list)

    # 打印学生信息的函数
    show_stu_info()

    # 学生总数的函数
    n = get_stu_num()
    print(n)

    # 调用函数
    find_stu_by_name()